/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia.derby;

import persistencia.AbstractRegistroTraduccionDAO;
import persistencia.DAOFactory;

/**
 * Clase que interactua con una base de datos Derby mapeando
 * objetos de acceso de tipo RegistroTraduccionDAO
 */
public class DerbyRegistroTraduccionDAO extends AbstractRegistroTraduccionDAO {

    /**
     * Seleciona la base de datos Derby y la settea en la clase abstracta.
     * Además redefine las query que son diferentes a la clase de la que extiende
     */
    public DerbyRegistroTraduccionDAO() {
        this.daoFactory = DAOFactory.getFactorys().get(0);

        this.insertarQuery = ""
                + "INSERT INTO registrotraduccion (textoOrigen, idiomaOrigen, textoDestino, idiomaDestino)"
                + " (SELECT ? AS textoOrigen, ? AS idiomaOrigen, ? AS textoDestino, ? AS idiomaDestino"
                + "     FROM registrotraduccion"
                + "     WHERE (textoOrigen = ?"
                + "             AND idiomaOrigen = ?"
                + "             AND textoDestino = ?"
                + "             AND idiomaDestino = ?)"
                + "         OR (textoOrigen = ?"
                + "             AND idiomaOrigen = ?"
                + "             AND textoDestino = ?"
                + "             AND idiomaDestino = ?)"
                + " HAVING COUNT(*) = 0)";

        this.buscarTraduccionQuery = ""
                + " SELECT * FROM registrotraduccion"
                + " WHERE textoOrigen=?"//1-textoOrigen
                + " AND idiomaOrigen=?"//2-idiomaOrigen
                + " AND idiomaDestino=?"//3-idiomaDestino
                + " OR textoDestino  IN (SELECT textoDestino"
                + "                      FROM registrotraduccion"
                + "                      WHERE idiomaOrigen=?"//4-idiomaDestino
                + "                            AND textoDestino=?"//5-textoOrigen
                + "                            AND idiomaDestino=?)";//6-idiomaOrigen

        this.buscarAproximacionQuery = ""
                + " SELECT r.textoOrigen,r.idiomaorigen, r.textodestino, r.idiomadestino"
                + " FROM"
                + "     (SELECT *"
                + "     FROM registrotraduccion"
                + "     WHERE idiomaOrigen= ? "
                + "             AND (textoOrigen LIKE ? "
                + "                     OR textoOrigen LIKE ? "
                + "                     OR textoOrigen LIKE ? )) as t,"
                + "     (SELECT *"
                + "     FROM registrotraduccion"
                + "     WHERE idiomaDestino=? "
                + "             AND (textoDestino LIKE ? "
                + "                     OR textoDestino LIKE ? "
                + "                     OR textoDestino LIKE ? )) AS r"
                + " WHERE t.idiomaDestino= ? OR r.idiomaOrigen= ? ";
    }
}
